package com.saydc.dao;

import java.util.ArrayList;
import java.util.List;

import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;

import com.saydc.model.CalificacionItemEvaluacion;
import com.saydc.model.Evaluacion;
import com.saydc.model.EvaluacionEmpleado;
import com.saydc.utils.HibernateUtils;

public class EvaluacionesDAO {
	
	private static EvaluacionesDAO instance;

	public static EvaluacionesDAO getInstance(){
		if(instance == null){
			instance = new EvaluacionesDAO();
		}
		return instance;
	}

	@SuppressWarnings("unchecked")
	public List<Evaluacion> getEvaluaciones() {
		ArrayList<Evaluacion> listaEval = null;
		Session session = HibernateUtils.currentSession();
		listaEval = (ArrayList<Evaluacion>)session.createQuery("select e from Evaluacion e").list();
		return listaEval;
	}
	
	@SuppressWarnings("unchecked")
	public List<EvaluacionEmpleado> getEvaluacionesEmpleado(int idEmpleado){
		ArrayList<EvaluacionEmpleado> listaEvaluaciones = null;
		Session session = HibernateUtils.currentSession();
		listaEvaluaciones = (ArrayList<EvaluacionEmpleado>)session.createCriteria(EvaluacionEmpleado.class)
													.add(Restrictions.eq("empleado.idEmpleado", idEmpleado))
													.addOrder(Order.asc("fechaEvaluacion"))
													.list();
		return listaEvaluaciones;
	}

	@SuppressWarnings("unchecked")
	public List<CalificacionItemEvaluacion> getCalificaciones() {
		Session session = HibernateUtils.currentSession();
		List<CalificacionItemEvaluacion> calificaciones = session.createQuery("select c from CalificacionItemEvaluacion c").list();
    	return calificaciones;
	}

	public void guardarEvaluacion(EvaluacionEmpleado evaluacion) {
		Session session;
		Transaction tx = null;
		try{
			session = HibernateUtils.currentSession();
			tx = session.beginTransaction();
			session.save(evaluacion.getResultado());
			session.save(evaluacion);
			tx.commit();
		}catch(Exception e){
			tx.rollback();
			e.printStackTrace();
			//TODO throw una exception mia
			System.out.println("Error al insertar en la base");
		}
	}
	
}
